Compilador optimizador

En ciencias de la computación, un compilador optimizador es un compilador que trata de minimizar ciertos atributos de un programa informático con el fin de aumentar la eficiencia y rendimiento.[1][2]​ Las optimizaciones del compilador se aplican generalmente mediante una secuencia de transformaciones de optimización, algoritmos que transforman un programa para producir otro con una salida semánticamente equivalente pero optimizado.[3]

Generalmente hay varios aspectos que se desean optimizar:[4]

  1. Optimización temporal: Reducir el tiempo de ejecución del programa.
  2. Optimización espacial: Reducir la cantidad de espacio en memoria que ocupa el programa en ejecución.
  3. Reducir el tamaño del programa.
  4. Minimizar la potencia consumida por un programa (debido a las computadoras portátiles).
Etapas de compilación

La optimización se realiza después de la generación de código de todo el programa o de un elemento ejecutable del programa (función, procedimiento, etc), por ende es dependiente del contexto. La condición que ha de cumplir es que el código optimizado se ha de comportar igual que el código de partida, excepto por ser más rápido o ocupar menos espacio.[4]

Se ha demostrado que algunos problemas de optimización de código son NP-completo, o incluso indecidibles.[5][6]​ En la práctica, factores como la voluntad del programador que debe esperar a que el compilador complete sus tareas, imponen límites superiores en las optimizaciones que las que una simple implementación del compilador puede proporcionar (la optimización es un proceso muy intensivo que generalmente necesita mucho procesamiento y memoria para llevarse a cabo). En el pasado, las limitaciones de memoria de las computadoras también eran un factor importante en la limitación de las optimizaciones que se podían realizar. Debido a todos estos factores, la optimización rara vez produce una salida de forma óptima (valga la redundancia), y el hecho de que una optimización pueda impedir el rendimiento en algunos casos, hace que, sean métodos heurísticos para mejorar el uso de los recursos en los programas típicos.[5]

La optimización es el campo donde se hace más investigación en los compiladores hoy en día. Las tareas del front-end (exploración, análisis sintáctico, análisis léxico, análisis semántico) son bien conocidas y, sin optimizar, la generación de código es relativamente sencilla. La optimización, por otra parte, aún es un campo que no se ha terminado de desarrollar de forma completa.[5]

  1. José M. Maria Carrasco. «La optimización: una mejora en la optimización de programas». Archivado desde el original el 5 de marzo de 2016. Consultado el 11 de febrero de 2022. 
  2. Johnsson, Richard K.; Weinstock, Charles B.; Hobbs, Steven O.; Geschke, Charles M. (1975). The design of an optimizing compiler. ISBN 0-444-00164-6. OCLC 1175890. Consultado el 11 de febrero de 2022. 
  3. Cooper, Keith D., and Torczon, Linda, Engineering a Compiler, Morgan Kaufmann, 2004, ISBN 1-55860-699-8
  4. a b «Optimización de compiladores». Consultado el 15 de enero de 2013. 
  5. a b c Maggie Johnson (4 de agosto de 2008). «Code Optimization» (en inglés). Consultado el 15 de enero de 2013. 
  6. «Compilador optimizador». Consultado el 15 de enero de 2013. 

From Wikipedia, the free encyclopedia · View on Wikipedia

Developed by Tubidy